A virtual machine (VM) is an abstraction—a virtualization—of an actual physical computer system. The VM, also known as the “guest,” is installed on a host computer platform, which includes system hardware and one or more virtualization layers. Each VM is configured with its own operating system that runs on top of virtual system hardware as emulated by the virtualization layers.
Provisioning is the process of creating and deploying a virtual machine (VM), including assigning and configuring resources, such as processors, memory, network, and disk storage, associated with the VM. Much research has focused on VM provisioning, including provisioning based on hardware selection. However, operating system (OS) and software deployment on the provisioned VMs are still carried out manually by a system administrator.
Typically, operating systems are large, complex software packages which, when installed manually, is a lengthy and expensive process that drains productivity and also introduces the possibility of inadvertent errors. System administrators may set up dedicated provisioning infrastructures, such as Preboot eXecution Environment (PXE) infrastructures. However, much time and effort must be spent managing and supporting such infrastructures. PXE in particular requires networking services such as Dynamic Host Configuration Protocol (DHCP), Trivial File Transfer Protocol (TFTP), etc., and typically does not support communication between networks and isolated fragments of sub-networks. As a result, in virtual datacenter and virtual cloud environments having many isolated networks, such as virtual local area networks (VLANs) and sub-networks, multiple PXE boot infrastructures would need to be provisioned and managed.